home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / environ / openfile.c < prev    next >
C/C++ Source or Header  |  1988-01-01  |  2KB  |  64 lines

  1. /*  use msc openfile /AL; link openfile environ getenv2;
  2.     openfile.c
  3.  
  4.     This program impliments an open command for batch files.
  5.     What OPENFILE does is remember a file name and initialize a file
  6.     position. Both of these are saved as strings in the environment string.
  7.     It is up to READFILE to    re-open the file each time, position it in the
  8.     right place, read a line, and update the position in the environment.
  9.     To use OPENFILE in a batch file type:
  10.     
  11.     OPENFILE <handle> <pathname>
  12.     
  13.     handle is any unique identifer to keep track of this file.
  14.     pathname is the name of the file to open.
  15.     
  16.     OPENFILE returns errorlevel=0 for failure, 1 for success
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <dos.h>
  22. #include <string.h>
  23.  
  24. extern char *search_for();    /*searches environment for string*/
  25. extern del_string();        /*deletes a string from the environment*/
  26. extern int ins_string();    /*insert a new string in the environment*/
  27.  
  28. char name[128]="n_";    /*space for the file name string*/
  29. char pos[64]="p_";    /*space for the file position string*/
  30.  
  31. int envseg;        /*segment of beginning of environment */
  32. char far *env;        /*pointer to start of environment string*/
  33. extern unsigned int far getenv2();    /* routine to find environment and its size*/
  34. int enl;        /*length of environment in bytes*/
  35.  
  36. main(argc,argv)
  37. int argc;
  38. char *argv[];
  39. {
  40.     int    arg=1;        /*where to look for arguments*/
  41.     if (argc<2)        /*do I have enough arguments?*/
  42.     {
  43.         printf("Usage: OPEN <handle> <pathname>\r\n");
  44.         exit(0);    /*exit if no file name*/
  45.     }
  46.     if (argc<3)        /*if there is only one argument,*/
  47.         arg=0;        /*use it as the file name*/
  48.     enl=getenv2(&envseg);    /*get length and address of system environment*/
  49.     FP_SEG(env)=envseg;
  50.     FP_OFF(env)=0;
  51.     strcat(name,argv[arg]);    /*build the file name string*/
  52.     strcat(name,"=");
  53.     del_string(name);        /*delete any old string with same handle*/
  54.     strcat(name,argv[arg+1]);
  55.     ins_string(name);        /*insert this name into environment*/
  56.     strcat(pos,argv[arg]);    /*build the file position string*/
  57.     strcat(pos,"=");
  58.     del_string(pos);        /*delete any old string with same handle*/
  59.     strcat(pos,"0");        /*initial position is zero*/
  60.     ins_string(pos);        /*insert this into the environment*/
  61.     exit(1);
  62. }
  63.  
  64.